package controller

import (
	"strconv"

	"gitee.com/jiebaiyou/formflow/model"
	"gitee.com/jiebaiyou/formflow/pkg/bizcode"
	"gitee.com/jiebaiyou/formflow/pkg/response"
	"github.com/gin-gonic/gin"
)

// TaskController 处理任务相关的HTTP请求
// 它依赖于TaskService接口来实现任务管理的业务逻辑
type TaskController struct {
	TaskService model.TaskService // 任务业务逻辑接口
}

// Create 处理创建新任务的请求
func (tc *TaskController) Create(c *gin.Context) {
	var task model.Task

	// 从请求体绑定数据到任务模型
	err := c.ShouldBind(&task)
	if err != nil {
		response.BadRequest(c, bizcode.InvalidParams.String(), err)
		return
	}

	// 从上下文中获取用户ID（由JWT中间件设置）
	userIDStr := c.GetString("x-user-id")
	if userIDStr == "" {
		response.BadRequest(c, bizcode.InvalidParams.String(), "令牌中未找到用户ID")
		return
	}

	// 将用户ID转换为uint类型
	userID, err := strconv.ParseUint(userIDStr, 10, 32)
	if err != nil {
		response.BadRequest(c, bizcode.InvalidParams.String(), "无效的用户ID")
		return
	}

	// 设置任务所属用户
	task.UserID = uint(userID)

	// 创建任务
	err = tc.TaskService.Create(c, &task)
	if err != nil {
		response.ServerError(c, bizcode.TaskCreateFailed.String(), err)
		return
	}

	response.OK(c, bizcode.Success.String(), nil)
}

// Fetch 获取当前用户的所有任务
func (tc *TaskController) Fetch(c *gin.Context) {
	// 从上下文中获取用户ID（由JWT中间件设置）
	userIDStr := c.GetString("x-user-id")
	if userIDStr == "" {
		response.BadRequest(c, bizcode.InvalidParams.String(), "令牌中未找到用户ID")
		return
	}

	// 将用户ID转换为uint类型
	userID, err := strconv.ParseUint(userIDStr, 10, 32)
	if err != nil {
		response.BadRequest(c, bizcode.InvalidParams.String(), "无效的用户ID")
		return
	}

	// 获取用户的所有任务
	tasks, err := tc.TaskService.FetchByUserID(c, uint(userID))
	if err != nil {
		response.ServerError(c, bizcode.TaskFetchFailed.String(), err)
		return
	}

	response.OK(c, bizcode.Success.String(), tasks)
}
